home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d19 / propck25.arc / SOURCE.ARC / CRC32.ASM < prev    next >
Assembly Source File  |  1989-05-29  |  7KB  |  184 lines

  1.         page ,132
  2. ;
  3. ; Copyright 1987, 1989 Samuel H. Smith;  All rights reserved
  4. ;
  5. ; This is a component of the ProDoor System.
  6. ; Do not distribute modified versions without my permission.
  7. ; Do not remove or alter this notice or any other copyright notice.
  8. ; If you use this in your own program you must distribute source code.
  9. ; Do not use any of this in a commercial product.
  10. ;
  11. ;
  12. ; CRC32 - Quick 32-bit crc calculation
  13. ;         Used by CRC32 unit.
  14. ;
  15. ; Written by Samuel Smith, 03-20-89
  16. ;
  17.  
  18. code segment word public
  19.         assume cs:code
  20.         public crcstr
  21.  
  22. crctable label word
  23.         dd      000000000h, 077073096h, 0ee0e612ch, 0990951bah, 0076dc419h
  24.         dd      0706af48fh, 0e963a535h, 09e6495a3h, 00edb8832h, 079dcb8a4h
  25.         dd      0e0d5e91eh, 097d2d988h, 009b64c2bh, 07eb17cbdh, 0e7b82d07h
  26.         dd      090bf1d91h, 01db71064h, 06ab020f2h, 0f3b97148h, 084be41deh
  27.         dd      01adad47dh, 06ddde4ebh, 0f4d4b551h, 083d385c7h, 0136c9856h
  28.         dd      0646ba8c0h, 0fd62f97ah, 08a65c9ech, 014015c4fh, 063066cd9h
  29.         dd      0fa0f3d63h, 08d080df5h, 03b6e20c8h, 04c69105eh, 0d56041e4h
  30.         dd      0a2677172h, 03c03e4d1h, 04b04d447h, 0d20d85fdh, 0a50ab56bh
  31.         dd      035b5a8fah, 042b2986ch, 0dbbbc9d6h, 0acbcf940h, 032d86ce3h
  32.         dd      045df5c75h, 0dcd60dcfh, 0abd13d59h, 026d930ach, 051de003ah
  33.         dd      0c8d75180h, 0bfd06116h, 021b4f4b5h, 056b3c423h, 0cfba9599h
  34.         dd      0b8bda50fh, 02802b89eh, 05f058808h, 0c60cd9b2h, 0b10be924h
  35.         dd      02f6f7c87h, 058684c11h, 0c1611dabh, 0b6662d3dh, 076dc4190h
  36.         dd      001db7106h, 098d220bch, 0efd5102ah, 071b18589h, 006b6b51fh
  37.         dd      09fbfe4a5h, 0e8b8d433h, 07807c9a2h, 00f00f934h, 09609a88eh
  38.         dd      0e10e9818h, 07f6a0dbbh, 0086d3d2dh, 091646c97h, 0e6635c01h
  39.         dd      06b6b51f4h, 01c6c6162h, 0856530d8h, 0f262004eh, 06c0695edh
  40.         dd      01b01a57bh, 08208f4c1h, 0f50fc457h, 065b0d9c6h, 012b7e950h
  41.         dd      08bbeb8eah, 0fcb9887ch, 062dd1ddfh, 015da2d49h, 08cd37cf3h
  42.         dd      0fbd44c65h, 04db26158h, 03ab551ceh, 0a3bc0074h, 0d4bb30e2h
  43.         dd      04adfa541h, 03dd895d7h, 0a4d1c46dh, 0d3d6f4fbh, 04369e96ah
  44.         dd      0346ed9fch, 0ad678846h, 0da60b8d0h, 044042d73h, 033031de5h
  45.         dd      0aa0a4c5fh, 0dd0d7cc9h, 05005713ch, 0270241aah, 0be0b1010h
  46.         dd      0c90c2086h, 05768b525h, 0206f85b3h, 0b966d409h, 0ce61e49fh
  47.         dd      05edef90eh, 029d9c998h, 0b0d09822h, 0c7d7a8b4h, 059b33d17h
  48.         dd      02eb40d81h, 0b7bd5c3bh, 0c0ba6cadh, 0edb88320h, 09abfb3b6h
  49.         dd      003b6e20ch, 074b1d29ah, 0ead54739h, 09dd277afh, 004db2615h
  50.         dd      073dc1683h, 0e3630b12h, 094643b84h, 00d6d6a3eh, 07a6a5aa8h
  51.         dd      0e40ecf0bh, 09309ff9dh, 00a00ae27h, 07d079eb1h, 0f00f9344h
  52.         dd      08708a3d2h, 01e01f268h, 06906c2feh, 0f762575dh, 0806567cbh
  53.         dd      0196c3671h, 06e6b06e7h, 0fed41b76h, 089d32be0h, 010da7a5ah
  54.         dd      067dd4acch, 0f9b9df6fh, 08ebeeff9h, 017b7be43h, 060b08ed5h
  55.         dd      0d6d6a3e8h, 0a1d1937eh, 038d8c2c4h, 04fdff252h, 0d1bb67f1h
  56.         dd      0a6bc5767h, 03fb506ddh, 048b2364bh, 0d80d2bdah, 0af0a1b4ch
  57.         dd      036034af6h, 041047a60h, 0df60efc3h, 0a867df55h, 0316e8eefh
  58.         dd      04669be79h, 0cb61b38ch, 0bc66831ah, 0256fd2a0h, 05268e236h
  59.         dd      0cc0c7795h, 0bb0b4703h, 0220216b9h, 05505262fh, 0c5ba3bbeh
  60.         dd      0b2bd0b28h, 02bb45a92h, 05cb36a04h, 0c2d7ffa7h, 0b5d0cf31h
  61.         dd      02cd99e8bh, 05bdeae1dh, 09b64c2b0h, 0ec63f226h, 0756aa39ch
  62.         dd      0026d930ah, 09c0906a9h, 0eb0e363fh, 072076785h, 005005713h
  63.         dd      095bf4a82h, 0e2b87a14h, 07bb12baeh, 00cb61b38h, 092d28e9bh
  64.         dd      0e5d5be0dh, 07cdcefb7h, 00bdbdf21h, 086d3d2d4h, 0f1d4e242h
  65.         dd      068ddb3f8h, 01fda836eh, 081be16cdh, 0f6b9265bh, 06fb077e1h
  66.         dd      018b74777h, 088085ae6h, 0ff0f6a70h, 066063bcah, 011010b5ch
  67.         dd      08f659effh, 0f862ae69h, 0616bffd3h, 0166ccf45h, 0a00ae278h
  68.         dd      0d70dd2eeh, 04e048354h, 03903b3c2h, 0a7672661h, 0d06016f7h
  69.         dd      04969474dh, 03e6e77dbh, 0aed16a4ah, 0d9d65adch, 040df0b66h
  70.         dd      037d83bf0h, 0a9bcae53h, 0debb9ec5h, 047b2cf7fh, 030b5ffe9h
  71.         dd      0bdbdf21ch, 0cabac28ah, 053b39330h, 024b4a3a6h, 0bad03605h
  72.         dd      0cdd70693h, 054de5729h, 023d967bfh, 0b3667a2eh, 0c4614ab8h
  73.         dd      05d681b02h, 02a6f2b94h, 0b40bbe37h, 0c30c8ea1h, 05a05df1bh
  74.         dd      02d02ef8dh
  75.  
  76.  
  77. ; -------------------------------------------------------------
  78. ;
  79. ;   procedure crcstr(var src;
  80. ;                    var crcout: longint;
  81. ;                    len: integer);
  82. ;      {calculate crc-32 of a buffer}
  83. ;
  84.  
  85. ; structure of stack frame --
  86. srcptr  equ     dword ptr [bp+0ch]      ;pointer to source buffer
  87. crcptr  equ     dword ptr [bp+08h]      ;pointer to crc_out
  88. srclen  equ     word  ptr [bp+06h]      ;length of source buffer
  89.  
  90. crcstr  proc    far
  91.         push    bp
  92.         mov     bp,sp           ;create stack frame
  93.  
  94.         les     si,crcptr
  95.         mov     ax,es:[si]
  96.         mov     dx,es:[si+2]    ;dx:ax -> crcout
  97.  
  98.         mov     cx,srclen       ;cx    -> source length
  99.         les     si,srcptr       ;es:si -> source buffer
  100.         mov     di,offset crctable     ;cs:di -> crctable
  101.  
  102. crcNext:
  103.         mov     bh,al           ;save crcout & 0x000000ff
  104.         mov     al,ah           ;(crcout >> 8) & 0x00ffffff
  105.         mov     ah,dl
  106.         mov     dl,dh
  107.         xor     dh,dh
  108.         mov     bl,es:[si]  ;*src++
  109.         inc     si
  110.         xor     bl,bh       ;crcval & 0x000000ff
  111.         xor     bh,bh
  112.         shl     bx,1
  113.         shl     bx,1
  114.         xor     ax,cs:[di+bx]
  115.         xor     dx,cs:[di+bx+2]
  116.  
  117.         dec     cx
  118.         jcxz    crcDone
  119.  
  120.         mov     bh,al       ;save crcout & 0x000000ff
  121.         mov     al,ah       ;(crcout >> 8) & 0x00ffffff
  122.         mov     ah,dl
  123.         mov     dl,dh
  124.         xor     dh,dh
  125.         mov     bl,es:[si]  ;*src++
  126.         inc     si
  127.         xor     bl,bh       ;crcval & 0x000000ff
  128.         xor     bh,bh
  129.         shl     bx,1
  130.         shl     bx,1
  131.         xor     ax,cs:[di+bx]
  132.         xor     dx,cs:[di+bx+2]
  133.  
  134.         dec     cx
  135.         jcxz    crcDone
  136.  
  137.         mov     bh,al       ;save crcout & 0x000000ff
  138.         mov     al,ah       ;(crcout >> 8) & 0x00ffffff
  139.         mov     ah,dl
  140.         mov     dl,dh
  141.         xor     dh,dh
  142.         mov     bl,es:[si]  ;*src++
  143.         inc     si
  144.         xor     bl,bh       ;crcval & 0x000000ff
  145.         xor     bh,bh
  146.         shl     bx,1
  147.         shl     bx,1
  148.         xor     ax,cs:[di+bx]
  149.         xor     dx,cs:[di+bx+2]
  150.  
  151.         dec     cx
  152.         jcxz    crcDone
  153.  
  154.         mov     bh,al       ;save crcout & 0x000000ff
  155.         mov     al,ah       ;(crcout >> 8) & 0x00ffffff
  156.         mov     ah,dl
  157.         mov     dl,dh
  158.         xor     dh,dh
  159.         mov     bl,es:[si]  ;*src++
  160.         inc     si
  161.         xor     bl,bh       ;crcval & 0x000000ff
  162.         xor     bh,bh
  163.         shl     bx,1
  164.         shl     bx,1
  165.         xor     ax,cs:[di+bx]
  166.         xor     dx,cs:[di+bx+2]
  167.  
  168.         loop    crcNext
  169.  
  170. crcDone:
  171.         les     si,crcptr
  172.         mov     es:[si],ax
  173.         mov     es:[si+2],dx
  174.  
  175.         pop     bp
  176.         ret     10                  ;dispose of 10 parameter bytes
  177. crcstr endp
  178.  
  179. code ends
  180. end
  181.  
  182.  
  183.  
  184.